package android.slc.appdb.utils;

import android.slc.appdb.sys.enums.IDictEnum;

import java.util.ArrayList;
import java.util.List;

public class DictEnumUtils {

    /**
     * 根据状态获取枚举
     *
     * @param value
     * @return
     */
    public static <E extends IDictEnum> E getByValue(E[] enums, Integer value) {
        return getByValue(enums, value, null);
    }

    public static <E extends IDictEnum> E getByValue(E[] enums, Integer value, E defEnum) {
        for (E cost : enums) {
            if (cost.getValue() == value) {
                return cost;
            }
        }
        return defEnum;
    }

    /**
     * 根据状态获取枚举名称
     *
     * @param value
     * @return
     */
    public static <E extends IDictEnum> String getLabelByValue(E[] enums, Integer value) {
        return getLabelByValue(enums, value, null);
    }

    public static <E extends IDictEnum> String getLabelByValue(E[] enums, Integer value, String devLabel) {
        E enumValue = getByValue(enums, value);
        if (enumValue == null) {
            return devLabel;
        }
        return enumValue.getLabel();
    }

    /**
     * 获取状态的下标
     *
     * @param value
     * @return
     */
    public static <E extends IDictEnum> int getValueIndex(E[] enums, Integer value) {
        return getValueIndex(enums, value, -1);
    }

    /**
     * 获取状态的下标，给默认值
     *
     * @param value
     * @param defIndex
     * @return
     */
    public static <E extends IDictEnum> int getValueIndex(E[] enums, Integer value, int defIndex) {
        int index = 0;
        for (E cost : enums) {
            if (cost.getValue() == value) {
                return index;
            }
            index++;
        }
        return defIndex;
    }

    /**
     * 获取状态名列表
     *
     * @return
     */
    public static <E extends IDictEnum> List<String> getLabelList(E[] enums) {
        List<String> labelList = new ArrayList<>();
        for (E cost : enums) {
            labelList.add(cost.getLabel());
        }
        return labelList;
    }
}
